import { createI18n } from 'vue-i18n';
import zh_cn from './locales/zh-cn.json'
import zh_tw from './locales/zh-TW.json'
import en_us from './locales/en-us.json'

/**
 * 系统语言设置
 * 
 * 优先级：用户选择 > 上次使用 > 系统语言
 */

// 初始化数据
const defaultLocale: string = 'en-US'

// 可接受的语言列表
export const locales: any = {
  // 中文区
  'zh-CN': { name: '简体中文', flags: ['🇨🇳'] },
  // 'zh-HK': { name: '繁体中文（中国港澳）', flags: ['🇭🇰', '🇲🇴']},
  'zh-TW': { name: '繁体中文（中国台湾）', flags: ['🇨🇳'] },
  // 英语区
  'en-US': { name: 'English(US)', flags: ['🇺🇸'] },
  // 'en-UK': { name: 'English(UK)', flags: ['🇬🇧'] }
}

// 项目设置
export const i18n = createI18n({
  locale: defaultLocale,
  messages: {
    'zh-CN': zh_cn,
    'zh-TW': zh_tw,
    'en-US': en_us
  }
})

// 获取系统语言
export const queryLocalOSLanguage = () => {
  const language = navigator.language || navigator.userLanguage || 'en-US'
  return language
}

// 设置语言
export const handleSetLanguage = (locale: string = defaultLocale) => {
  let realLocal: string = defaultLocale
  if (locales.hasOwnProperty(locale)) {
    // 合法 locale：设置为此 locale
    realLocal = locale
  }
  localStorage.setItem('lang', realLocal)
  i18n.global.locale = realLocal
}


// 初始化
const init = () => {
  const osLanguage = queryLocalOSLanguage()
  const localSettedLanguage = localStorage.getItem('lang')
  if (!localSettedLanguage) {
    // 设置默认语言
    handleSetLanguage(osLanguage)
  } else {
    handleSetLanguage(localSettedLanguage)
  }
}
init()